package com.xbongbong.saas.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * 操作日志表单字段枚举，用于操作日志日志导出
 * @author 杨磊
 * @since v1.0
 */
@Getter
public enum OperateLogFormAttrEnum {
	/**
	 * 操作人员
	 */
	OPERATE_USER(1, "enum.name.operate_user", "opUserName"),
	/**
	 * 操作时间
	 */
	OPERATE_TIME(2, "enum.name.operate_time", "addTime"),
	/**
	 * 所属模块
	 */
	OPERATE_MODULE_TYPE(3, "enum.name.operate_module_type", "moduleName"),
	/**
	 * 所属操作
	 */
	OPERATE_TYPE(4,"enum.name.operate.type","opTypeName"),
	/**
	 * 操作对象
	 */
	OPERATE_OBJECT(5,"enum.name.operate.object","opObjectName"),
	/**
	 * 操作内容
	 */
	OPERATE_MEMO(6,"enum.name.operate.memo","memo");

	/** 枚举值 -- 操作类型标识*/
	private final int	 code;

	/** 枚举信息--操作名称*/
	private final String name;

	/** 枚举描述 --角色使用时状态*/
	private final String alias;

	/**
	 * 构造一个<code>OperateTypeEnum</code>枚举对象
	 *
	 * @param code 操作码
	 * @param name 操作名称
	 * @param alias 操作别名
	 */
	OperateLogFormAttrEnum(int code, String name, String alias) {
		this.code = code;
		this.name = name;
		this.alias = alias;
	}
	
	/**
	 * 通过枚举<code>alias</code>获得枚举
	 *
	 * @param alias 操作别名
	 * @return OperateTypeEnum
	 */
	public static OperateLogFormAttrEnum getByAlias(String alias) {
		for (OperateLogFormAttrEnum cacheCode : values()) {
			if (cacheCode.getAlias().equals(alias)) {
				return cacheCode;
			}
		}
		return null;
	}

	/**
	 * 获取全部枚举值
	 * 
	 * @return List<String>
	 */
	public static List<String> getAllEnumName() {
		List<String> list = new ArrayList<>();
		for (OperateLogFormAttrEnum cache : values()) {
			list.add(cache.getName());
		}
		return list;
	}

	/**
	 * 获取全部枚举alias
	 *
	 * @return List<String>
	 */
	public static List<String> getAllEnumAlias() {
		List<String> list = new ArrayList<>();
		for (OperateLogFormAttrEnum cache : values()) {
			list.add(cache.getAlias());
		}
		return list;
	}

	public String getName() {
		return I18nMessageUtil.getMessage(name);
	}
}
